% -*- coding:utf-8 -*-

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\usepackage[bookmarks, hyperfootnotes=false, colorlinks=true,%
            urlcolor=blue, linkcolor=black,  citecolor=black,%
            pagecolor=black, anchorcolor=black, breaklinks=true]{hyperref}

\usepackage{enumerate}
\usepackage{eurosym}
\usepackage{graphicx}
\usepackage{times}
\usepackage{color}
\usepackage{array}
\usepackage{colortbl}
\usepackage{longtable}

\usepackage{fancyhdr}
\usepackage{fancybox}
\usepackage{listings}
\usepackage{subfigure}
\usepackage{hyperref}
\usepackage{tikz}

\usepackage{epsfig}
\usepackage{float}
\usepackage{amsmath}
\usepackage{lscape}

\setlength{\headheight}{16pt}
\setlength{\oddsidemargin}{17pt}
\setlength{\textwidth}{420pt}
\setlength{\topmargin}{0pt}
\setlength{\textheight}{600pt}
\setlength{\marginparwidth}{55pt}


\newcommand{\fsm}{\emph{FSM}}
\newcommand{\ice}{\emph{ICE}}
\newcommand{\icefield}{\emph{IceField}}
\newcommand{\slice}{\emph{Slice}}

\pagestyle{fancy}

\renewcommand{\footrulewidth}{0.5pt}

\fancyhead[R]{Práctica 2 - Tarea 1}
\fancyhead[L]{Inteligencia Artificial}
\fancyfoot[R]{Manuel J. Abaldea Gª-Pliego}
\fancyfoot[L]{Formalizar estado y función evaluación}


\newenvironment{float_code} {
      \begin{lst}
      }
      {
      \end{lst}
      }


\newfloat{lst}{H}{lop}[section]
\floatname{lst}{Listado}
\floatplacement{codigo}{!htb}
\floatstyle{plain}


\begin{document}

\begin{center}
\begin{Large}\textit{\textquotedblleft
Inteligencia Artificial \ \ Práctica 2 - Juego con
adversario\textquotedblright}\end{Large}
\end{center}

\begin{center}
\begin{Large}\textit{Tarea1 - Especificación}\end{Large}
\end{center}

\vspace*{0.5cm}

\begin{flushright}
\begin{large}
\textit{
    Alumno: Manuel J. Abaldea Gª-Pliego
 }
\end{large}
\end{flushright}

\vspace*{1.5 cm}

\section*{Especificar y formalizar el estado del juego.}
La práctica se realizará en \emph{C++}, el estado será un objeto
cuyos atributos serán los siguientes:
\subsection*{Tablero}
Tablero representando las seis filas de forma consecutiva con un jugador \emph{'A'}
y otro \emph{'B'}, y las casillas libres con \emph{'.'}.
\begin{verbatim}
  map<pair<int,int>, char> tablero;
  for(fila=0; fila<6; fila++){
    for(colum=0;colum<7;colum++){
      tablero[make_pair(fila,colum)]='.';
    }
  }
\end{verbatim}

\subsection*{Jugador}
El jugador será un carácter 'A' o 'B'
\begin{verbatim}
  char jugador;
  Estado::Estado(char j,){
    int colum,fila;
    for(fila=0; fila<6; fila++){
      for(colum=0;colum<7;colum++){
        tablero[make_pair(fila,colum)]='.';
      }
    }
    jugador = j;
  }
\end{verbatim}

\clearpage

\subsection*{Salida}
La salida nos identificará la casilla de la ficha a mover como <'columna'> o <-1> si no
hay movimiento válido.
\begin{verbatim}
  int columna;
  Estado::Estado(char j, int c){
    int colum,fila;
    for(fila=0; fila<6; fila++){
      for(colum=0;colum<7;colum++){
        tablero[make_pair(fila,colum)]='.';
      }
    }
    jugador = j;
    columna = c;
  }
\end{verbatim}

\section*{Función evaluación}
 Fijar una función evaluación de un estado como la suma total del valor de cada posición del
tablero ocupado por dicho jugador. El valor de las casillas viene dado
en la siguiente tabla:

\begin{center}
 \begin{tabular}[!ht]{|c|c|c|c|c|c|c|} \hline
   0 & 1 & 2 & 3 & 2 & 1 & 0 \\ \hline
   1 & 2 & 3 & 4 & 3 & 2 & 1 \\ \hline
   2 & 3 & 4 & 5 & 4 & 3 & 2 \\ \hline
   2 & 3 & 4 & 5 & 4 & 3 & 2 \\ \hline
   1 & 2 & 3 & 4 & 3 & 2 & 1 \\ \hline
   0 & 1 & 2 & 3 & 2 & 1 & 0 \\ \hline
  \end{tabular}
\end{center}

El código sería el siguiente:

\begin{verbatim}
int Estado::evaluar(char j){
  int valor = 0;
  int fila, colum;
  map<int,int> aux = Tablero_ref::T_ref;
  for(fila=0; fila<6; fila++){
    for(colum=0;colum<7;colum++){
      if(tablero[make_pair(fila,colum)]==j)
	valor +=aux[10*fila+colum];
    }
  }
  return valor;
}
\end{verbatim}

\emph{Tablero\_ref} es el tablero de referencia, una estructura
constante donde se almacenan los valores dados en la tabla:

\begin{verbatim}
struct Tablero_ref{
  static map<int,int> create_t(){
    map<int,int> m;
    m[0] = 0;
    m[1] = 1;
    m[2] = 2;
    ....
    m[54] = 2;
    m[55] = 1;
    m[56] = 0;

    return m;
  }
  static const map<int,int> T_ref;
\end{verbatim}

\section*{Interfaz gráfico}
Se ha optado por utilizar \emph{QT} al igual que la anterior práctica,
ya que esta herramienta está muy orientada a lenguajes orientados a
objetos y concretamente a \emph{C++}.
\begin{figure}[!h]
  \center
  \includegraphics[scale=0.6]{iface}
  \caption{Interfaz de la práctica}
\end{figure}

\section*{Código implementado}
El código, así como el seguimiento de esta práctica está disponible en:

\url{https://code.google.com/p/ia-2012-13/}

\end{document}
